{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Load Test Log Queries",
      "provenance": [],
      "collapsed_sections": [
        "6AZnmE2XGXrq",
        "sexUkYLdGc0z"
      ],
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UbgapGliFILi",
        "colab_type": "text"
      },
      "source": [
        "## License"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2l5ES4VuElhc",
        "colab_type": "text"
      },
      "source": [
        "Copyright 2020 Google LLC\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "you may not use this file except in compliance with the License.\n",
        "You may obtain a copy of the License at\n",
        "\n",
        "      http://www.apache.org/licenses/LICENSE-2.0\n",
        "\n",
        "Unless required by applicable law or agreed to in writing, software\n",
        "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "See the License for the specific language governing permissions and\n",
        "limitations under the License.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "W7i1IleCdIEZ",
        "colab_type": "text"
      },
      "source": [
        "# Load test analysis"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6AZnmE2XGXrq",
        "colab_type": "text"
      },
      "source": [
        "## Initialization"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "XHUPlLRgNBgS",
        "colab": {}
      },
      "source": [
        "from google.colab import auth\n",
        "auth.authenticate_user()\n",
        "project_id = '[your project id]'"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sexUkYLdGc0z",
        "colab_type": "text"
      },
      "source": [
        "## Log Overview"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "nFF9Wz1CAyVI",
        "outputId": "f9b72bc3-eeb6-420a-be46-7ef6401cea4c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "import pandas as pd\n",
        "import datetime\n",
        "today = datetime.datetime.utcnow().strftime(\"%Y%m%d\")\n",
        "df = pd.io.gbq.read_gbq('''\n",
        "  SELECT\n",
        "  count(*) as total\n",
        "FROM\n",
        "  `web_instr_container.stdout_{}`\n",
        "'''.format(today), project_id=project_id)\n",
        "\n",
        "total = df.total[0]\n",
        "print(f'Log records: {total}')"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Log records: 20028\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gPGqwNuNEjMK",
        "colab_type": "text"
      },
      "source": [
        ""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YgkJ4CrhFToC",
        "colab_type": "text"
      },
      "source": [
        "## Client Latency"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hNHRDHQwFWLa",
        "colab_type": "code",
        "outputId": "7435344c-4286-4691-bd1c-993937bf8f26",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 296
        }
      },
      "source": [
        "import pandas as pd\n",
        "import datetime\n",
        "today = datetime.datetime.utcnow().strftime(\"%Y%m%d\")\n",
        "df = pd.io.gbq.read_gbq('''\n",
        "SELECT\n",
        "  EXTRACT(MINUTE FROM timestamp) AS Minute,\n",
        "  REGEXP_EXTRACT(textPayload, r\"LoadTest: latency: ([0-9]+)\\.\") AS Latency\n",
        "FROM \n",
        "  `web_instr_container.stdout_{}`\n",
        "WHERE\n",
        "  EXTRACT(HOUR FROM timestamp) = 2\n",
        "  AND\n",
        "  EXTRACT(MINUTE FROM timestamp) > 0\n",
        "  AND\n",
        "  EXTRACT(MINUTE FROM timestamp) < 5\n",
        "ORDER BY\n",
        "  Minute\n",
        "'''.format(today), project_id=project_id)\n",
        "df1 = df[pd.isnull(df['Latency']) == False]\n",
        "df1 = df1.astype({'Minute': 'int64', 'Latency': 'int64'})\n",
        "latency = df1.groupby('Minute').median()\n",
        "ax = latency.plot()\n",
        "ax.set_xlabel('Time (min)')\n",
        "ax.set_ylabel('Median Client Latency (ms)')"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(0, 0.5, 'Median Client Latency (ms)')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 17
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zVnd4pgzj0ze",
        "colab_type": "text"
      },
      "source": [
        "## Scatter Plot"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AwHu2e3zIUCh",
        "colab_type": "code",
        "outputId": "029cb0a4-a5fe-40a0-bd92-abdbddd94694",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 296
        }
      },
      "source": [
        "import pandas as pd\n",
        "import datetime\n",
        "today = datetime.datetime.utcnow().strftime(\"%Y%m%d\")\n",
        "df = pd.io.gbq.read_gbq('''\n",
        "SELECT\n",
        "  EXTRACT(SECOND FROM timestamp) AS Seconds,\n",
        "  REGEXP_EXTRACT(textPayload, r\"LoadTest: latency: ([0-9]+)\\.\") AS Latency\n",
        "FROM \n",
        "  `web_instr_container.stdout_{}`\n",
        "WHERE\n",
        "  EXTRACT(HOUR FROM timestamp) = 2\n",
        "  AND\n",
        "  EXTRACT(MINUTE FROM timestamp) = 3\n",
        "ORDER BY\n",
        "  Seconds\n",
        "'''.format(today), project_id=project_id)\n",
        "df1 = df[pd.isnull(df['Latency']) == False]\n",
        "df1 = df1.astype({'Seconds': 'int64', 'Latency': 'int64'})\n",
        "ax = df1.plot.scatter(x='Seconds', y='Latency', c='DarkBlue')\n",
        "ax.set_xlabel('Time (s)')\n",
        "ax.set_ylabel('Client Latency (ms)')"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(0, 0.5, 'Client Latency (ms)')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 18
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\niplVjZNJDnluLjPra5xMcshzc5lZX+NkkkOem8vM+hpPp1KklpYNFZsHq6O62sc8N5dVWyX/TVjf\nl/szE0lTJD0lqUnSJeWoY968RkaP/k+OOWY+o0f/Z1nvnOqortbYhz98U5v6a2p246ijhlfkH/KN\nN65g6tRfceONK/pNXf2xT5Wqa968RkaN+gkf/OA8Ro36SdnvJuxvf36Vruu2257hM59ZzG23PVO2\nOnK90qKkgcB/AScCzWRL+E6LiE7/Zrq70mJLywaGD7+arVu3xwYOhNWrP9/rv8Q7qmvAAJDE1q3b\n/54GDRJ/+cvnKva/wVGjrqG5+e8F27vz4oufy3Vd/bFPlaqrpWUD++13NYW/OiR4+eXe/zcB/e/P\nr9J1HXrotTzxxKsF28N4/PFzu/05/X2lxQlAU0Q8GxGbgfnA1N6s4J57Xmzzyx1g69Ys3ts6qmvb\nNtokEoAtW6Is9XfkxhtXtPnCA6xc+fey/E+qUnX1xz5Vsq6FC5+m/f9BI7J4b+uPf36VrOu2255p\nk0gAli17tSxnKHlPJiOAlQXbzSnWa15++e/dipejro7LVuaZkgULnupWPA919cc+VbKuJ59c2614\nKfrjn18l6/r1r5u6FS9F3pNJUSTNkNQgqaGlpaVbx06aVNuteCm685mTJo3p9fo7csYZB3Urnoe6\n+mOfKlnXxz52YLfipeiPf36VrOv00w/oVrwUeU8mq4BRBdsjU6yNiJgVEXURUVdTU9OtCg4+eBjn\nn394m9j55x/OwQcP60Fze1ZXpervyNlnj2fUqN3bxEaN2p2zzx6f27r6Y58qWdfRR49g8uTRbWKT\nJ4/m6KN79aIA0D///CpZ16mn7s+hh7b9XXHoocM49dT9e7UeACIity+yW5ufBcYCg4HHgEO6OubI\nI4+Mnlix4pW47rplsWLFKz06vtS6Kll/R264YXmcdtotccMNy/tNXf2xT5Ws6777muOb37wv7ruv\nuaz1RPTPP79K1nXrrU1RX39n3HprU48/A2iILn635vpuLgBJpwA/AAYCcyLie12V7+7dXGZmtuO7\nuXL/0GJE3A7cXu12mJntzPI+ZmJmZn2Ak4mZmZXMycTMzErmZGJmZiXL/d1c3SWpBXihiKL7Aq+U\nuTmV5j7lR3/sV3/sE/TPfnXUpzER0emDejtdMimWpIauboPLI/cpP/pjv/pjn6B/9qsnffJlLjMz\nK5mTiZmZlczJpHOzqt2AMnCf8qM/9qs/9gn6Z7+63SePmZiZWcl8ZmJmZiVzMjEzs5I5mbQjaYqk\npyQ1Sbqk2u3pKUlzJK2R9ERBbB9JSyQ9nX7uXc02dpekUZLukbRC0nJJF6V4bvsl6W2SHpT0WOrT\n/0rxsZIeSN/DmyQNrnZbu0vSQEmPSLotbfeHPj0vaZmkRyU1pFhuv38AkoZKulnSk5IaJX2gJ31y\nMikgaSDwY+BkYDwwTVLvr4xTGdcBU9rFLgHujohxwN1pO0+2AF+KiPHAROC89PeT535tAo6PiPcC\nhwNTJE0ELgeujIgDgHVAfRXb2FMXAY0F2/2hTwDHRcThBc9h5Pn7B3AVcGdEvBt4L9nfWff71NVi\nJzvbC/gAsLhgeyYws9rtKqE/tcATBdtPAcPT++HAU9VuY4n9Wwic2F/6BewGPAy8n+zp40Ep3uZ7\nmYcX2aqndwPHA7cBynufUrufB/ZtF8vt9w/YC3iOdDNWKX3ymUlbI4CVBdvNKdZf7BcRq9P7l4D9\nqtmYUkiqBd4HPEDO+5UuBz0KrAGWAM8Ar0XEllQkj9/DHwBfAbal7WHkv08AAdwlaamkGSmW5+/f\nWKAFuDZdkvyppN3pQZ+cTHZSkf2XI5f3hUt6O/BL4OKIeL1wXx77FRFbI+Jwsv/NTwDeXeUmlUTS\nqcCaiFha7baUwQcj4giyS+HnSTqmcGcOv3+DgCOAayLifcDfaXdJq9g+OZm0tQoYVbA9MsX6i5cl\nDQdIP9dUuT3dJmkXskRyY0TcksK57xdARLwG3EN2CWiopNaVUPP2PTwaOE3S88B8sktdV5HvPgEQ\nEavSzzXAr8iSf56/f81Ac0Q8kLZvJksu3e6Tk0lbDwHj0l0ng4GzgEVVblNvWgRMT++nk4055IYk\nAbOBxoj4fsGu3PZLUo2koen9ELIxoEaypPLxVCxXfYqImRExMiJqyf4N/S4izibHfQKQtLukPVrf\nA5OBJ8jx9y8iXgJWSjoohU4AVtCDPvkJ+HYknUJ2vXcgMCcivlflJvWIpHnAsWRTSb8MXAr8GlgA\njCabhv+MiFhbrTZ2l6QPAv8PWMb2a/FfIxs3yWW/JB0GzCX7vg0AFkTEtyW9i+x/9fsAjwCfiIhN\n1Wtpz0g6FvhyRJya9z6l9v8qbQ4Cfh4R35M0jJx+/wAkHQ78FBgMPAucS/ou0o0+OZmYmVnJfJnL\nzMxK5mRiZmYlczIxM7OSOZmYmVnJnEzMzKxkTiZmPSRpWJo99lFJL0laVbD9pzLV+T5Js7vYXyPp\nznLUbdaVQTsuYmYdiYhXyWb6RdK3gL9FxBVlrvZrwHe7aFOLpNWSjo6IP5a5LWZv8pmJWRlI+lv6\neaykP0haKOlZSZdJOjutYSUUUX4AAAGBSURBVLJM0v6pXI2kX0p6KL2O7uAz9wAOi4jH0vaHC86E\nHml9Opvs4dSzK9RVM8DJxKwS3gv8M3Aw8EngwIiYQPbU8QWpzFVka30cBfzPtK+9OrLpO1p9GTgv\nTRL5IWBjijekbbOK8WUus/J7qHU6b0nPAHel+DLguPR+EjA+m34MgD0lvT0i/lbwOcPJpgtv9Ufg\n+5JuBG6JiOYUXwO8s/e7YdY5JxOz8iucf2pbwfY2tv8bHABMjIj/7uJzNgJva92IiMsk/QY4Bfij\npJMi4slUZmMnn2FWFr7MZdY33MX2S16tk++11wgcUFBm/4hYFhGXk8143boOyoG0vRxmVnZOJmZ9\nw4VAnaTHJa0gG2NpI5117FUw0H6xpCckPQ68AdyR4scBv6lEo81aedZgsxyR9AXgrxHR0QB9a5l7\ngakRsa5yLbOdnc9MzPLlGtqOwbQhqQb4vhOJVZrPTMzMrGQ+MzEzs5I5mZiZWcmcTMzMrGROJmZm\nVjInEzMzK9n/B8SNMuB2xuXKAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Mi4EGHIwd4jK",
        "colab_type": "text"
      },
      "source": [
        "## Responses"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "y318gNmwU57S",
        "outputId": "2e40cff7-a5f3-4c37-ce8a-8a9447e4dd43",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 359
        }
      },
      "source": [
        "import pandas as pd\n",
        "import datetime\n",
        "today = datetime.datetime.utcnow().strftime(\"%Y%m%d\")\n",
        "df = pd.io.gbq.read_gbq('''\n",
        "SELECT\n",
        "  EXTRACT(MINUTE FROM timestamp) as Minute,\n",
        "  httpRequest.status AS Status\n",
        "FROM\n",
        "   `web_instr_load_balancer.requests_{}`\n",
        "GROUP BY\n",
        "  Minute, Status\n",
        "ORDER BY Minute, Status\n",
        "'''.format(today), project_id=project_id)\n",
        "df.head(10)"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Minute</th>\n",
              "      <th>Status</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>304</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>1</td>\n",
              "      <td>502</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>2</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>3</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>4</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>5</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>6</td>\n",
              "      <td>200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>6</td>\n",
              "      <td>404</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Minute  Status\n",
              "0       0     200\n",
              "1       0     304\n",
              "2       1     200\n",
              "3       1     502\n",
              "4       2     200\n",
              "5       3     200\n",
              "6       4     200\n",
              "7       5     200\n",
              "8       6     200\n",
              "9       6     404"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qweYw59UL7In",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}